// 指令封装
import { useIntersectionObserver } from '@vueuse/core'
import { ref } from 'vue'

/*
需要导入main.js中的 app。use（） 注册为全局指令

*/
// 测试
// < img v - imgLazy="item.picture" alt = "" />

export default {

  install (app) {
    app.directive('imLazy', {
      mounted (el, binding) {
        const { stop } = useIntersectionObserver(
          el,
          ([{ isIntersecting }], observerElement) => {
            console.log('我出现在可视区域了', isIntersecting)
            if (isIntersecting) {
              el.src = binding.value
              stop()
            }
          }
        )
      }
    })
  }
}
export const useLazyData = apiFn => {
  const result = ref([])
  const target = ref(null)
  /*
  第一个参数：ref 引用 获取dao元素
  第二个参数：回调 ，回调里面的参数 isIntersecting 会在参数 以获取DOm元素进入可视区域的时候监听 并且为true
  第三个参数：DOM 元素进入可视区域的距离 从 0-1
  */
  const { stop } = useIntersectionObserver(
    target,
    ([{ isIntersecting }]) => {
      if (isIntersecting) {
        stop()
        apiFn().then(data => {
          result.value = data.result
        })
      }
    },
    {
      threshold: 0
    }
  )
  // 返回两个值 result 返回的是调用接口返回的后台数据
  // target 用来实现ref 的引用
  return {
    result, target
  }
}

// 导出使用 useLazyData 方法，该方法接收一个参数：接口函数名
